/*================================================================
*   Copyright (C) 2023 baichao All rights reserved.
*   
*   文件名称：sbrk.c
*   创 建 者：baichao
*   创建日期：2023年08月01日
*   描    述：
*
================================================================*/


#include <unistd.h>
#include <stdio.h>

int main() {
    void *cur_brk;

    // 获取当前程序数据段结束地址
    cur_brk = sbrk(0);
    printf("start, curr data sec end pos: %p\n", cur_brk);

    // 增加堆的大小
    long delta = 100*1024*1024;
    cur_brk = sbrk(delta); // 堆增长delta, 此时的返回值cur_brk是增加前的地址
    printf("add1, curr data sec end pos: %p\n", cur_brk);
    cur_brk = sbrk(0);
    printf("add2, curr data sec end pos: %p\n", cur_brk);

    // 减小堆的大小
    delta = 50*1024*1024;
    cur_brk = sbrk(delta); // 堆缩小delta，同理，此时的返回值cur_brk是减小前的地址
    printf("sub1, curr data sec end pos: %p\n", cur_brk);
    cur_brk = sbrk(0);
    printf("sub2, curr data sec end pos: %p\n", cur_brk);

    return 0;
}

